package gson.gson.cclass;

import com.google.gson.JsonPrimitive;

import java.math.BigDecimal;
import java.math.BigInteger;

public class JsonPrimitiveExample {

    private JsonPrimitive jsonPrimitive;

//    public JsonPrimitiveExample(Object value) {
//        this.jsonPrimitive = new JsonPrimitive(String.valueOf(value));
//    }
    public JsonPrimitiveExample(Object value) {
        if (value instanceof Boolean) {
            this.jsonPrimitive = new JsonPrimitive((Boolean) value);
        } else if (value instanceof Number) {
            this.jsonPrimitive = new JsonPrimitive((Number) value);
        } else if (value instanceof String) {
            this.jsonPrimitive = new JsonPrimitive((String) value);
        } else {
            throw new IllegalArgumentException("Unsupported type");
        }
    }

    /**
     * 比较 JsonPrimitive 对象是否相等。
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;

        JsonPrimitiveExample that = (JsonPrimitiveExample) obj;
        return this.jsonPrimitive.equals(that.jsonPrimitive);
    }


    /**
     * 获取 JsonPrimitive 值为 BigDecimal 类型。
     */
    public BigDecimal getAsBigDecimal() {
        return jsonPrimitive.getAsBigDecimal();
    }

    /**
     * 获取 JsonPrimitive 值为 BigInteger 类型。
     */
    public BigInteger getAsBigInteger() {
        return jsonPrimitive.getAsBigInteger();
    }

    /**
     * 获取 JsonPrimitive 值为 Boolean 类型。
     */
    public Boolean getAsBoolean() {
        return jsonPrimitive.getAsBoolean();
    }

    /**
     * 获取 JsonPrimitive 值为 Double 类型。
     */
    public Double getAsDouble() {
        return jsonPrimitive.getAsDouble();
    }

    /**
     * 获取 JsonPrimitive 值为 Float 类型。
     */
    public Float getAsFloat() {
        return jsonPrimitive.getAsFloat();
    }

    /**
     * 获取 JsonPrimitive 值为 Integer 类型。
     */
    public Integer getAsInt() {
        return jsonPrimitive.getAsInt();
    }

    /**
     * 获取 JsonPrimitive 值为 Long 类型。
     */
    public Long getAsLong() {
        return jsonPrimitive.getAsLong();
    }

    /**
     * 获取 JsonPrimitive 的哈希值。
     */
    public int hashCode() {
        return jsonPrimitive.hashCode();
    }

    /**
     * 判断 JsonPrimitive 是否为 Boolean 类型。
     */
    public boolean isBoolean() {
        return jsonPrimitive.isBoolean();
    }

    /**
     * 判断 JsonPrimitive 是否为 Number 类型。
     */
    public boolean isNumber() {
        return jsonPrimitive.isNumber();
    }

    /**
     * 判断 JsonPrimitive 是否为 String 类型。
     */
    public boolean isString() {
        return jsonPrimitive.isString();
    }
}
